/**
 * 模拟淘宝SKU添加组合
 * 页面注意事项：
 *      1、 .div_contentlist   这个类变化这里的js单击事件类名也要改
 *      2、 .Father_Title      这个类作用是取到所有标题的值，赋给表格，如有改变JS也应相应改动
 *      3、 .Father_Item       这个类作用是取类型组数，有多少类型就添加相应的类名：如: Father_Item1、Father_Item2、Father_Item3 ...
 */
define(['jquery'],function($) {
    var Good_sku = function () {
        //SKU信息
        $(".div_contentlist label").bind("change", function () {
            step.Creat_Table();
        });
        var step = {
            //SKU信息组合
            Creat_Table: function () {
                step.hebingFunction();
                var SKUObj = $(".Father_Title");
                //var skuCount = SKUObj.length;//
                var arrayTile = new Array();//标题组数
                var arrayInfor = new Array();//盛放每组选中的CheckBox值的对象
                var arrayColumn = new Array();//指定列，用来合并哪些列
                var bCheck = true;//是否全选
                var columnIndex = 0;
                var specName = new Array();//类别name
                var specId = new Array();//类别id
                var dataId = new Array();//规格id
                var abId = new Array();//规格name

                //规格分类 id name
                SKUObj.each(function () {
                    specName.push($(this).find("li").html());
                    specId.push($(this).find("li").attr("data-tit"));
                });

                $.each(SKUObj, function (i, item) {
                    arrayColumn.push(columnIndex);
                    columnIndex++;
                    arrayTile.push(SKUObj.find("li").eq(i).html().replace("：", ""));
                    var itemName = "Father_Item" + i;
                    //选中的CHeckBox取值
                    var order = new Array();

                    //console.log(specName);
                    $("." + itemName + " input[type=checkbox]:checked").each(function () {
                        //alert($(this).attr('data-ddd'))
                        //alert($(this).val())
                        order.push($(this).val());

                        //规格名称 id name
                        abId.push($(this).val());
                        dataId.push($(this).attr("data-id"));

                    });

                    arrayInfor.push(order);
                    if (order.join() == "") {
                        bCheck = false;
                    }
                    //var skuValue = SKUObj.find("li").eq(index).html();


                });

                //开始创建Table表
                if (bCheck == true) {
                    var RowsCount = 0;
                    $("#createTable").html("");
                    var table = $("<table id=\"process\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"width:100%;padding:5px;\"></table>");
                    table.appendTo($("#createTable"));
                    var thead = $("<thead></thead>");
                    thead.appendTo(table);
                    var trHead = $("<tr></tr>");
                    trHead.appendTo(thead);
                    //创建表头
                    $.each(arrayTile, function (index, item) {
                        var td = $("<th>" + item + "</th>");
                        td.appendTo(trHead);
                    });
                    var itemColumHead = $("<th style=\"width:100px;\">价格</th><th style=\"width:100px;\">龙珠价</th><th style=\"width:100px;\">库存</th><th style=\"width:100px;\">预警值</th><th style=\"width:100px;\">商品货号</th>");
                    itemColumHead.appendTo(trHead);
                    var tbody = $("<tbody></tbody>");
                    tbody.appendTo(table);
                    ////生成组合
                    var zuheDate = step.doExchange(arrayInfor);
                    if (zuheDate.length > 0) {
                        //创建行
                        $.each(zuheDate, function (index, item) {
                            var td_array = item.split(",");
                            var tr = $("<tr></tr>");
                            tr.appendTo(tbody);
                            //console.log(item);

                            $.each(td_array, function (i, values) {
                                //var td = $("<td>" + values + "</td>");
                                //dataId[abId.indexOf(values)]
                                var td = $("<td><b>" + values + "</b>" +
                                    "<input type='hidden' name=\"specs[" + index + "].specValueId[" + i + "]\" value='" + dataId[abId.indexOf(values,i)] + "'>" +
                                    "<input type='hidden' name=\"specs[" + index + "].specValue[" + i + "]\" value='" + values + "'>" +
                                    "<input type='hidden' name=\"specs[" + index + "].specId[" + i + "]\" value='" + specId[i] + "'>" +
                                    "<input type='hidden' name=\"specs[" + index + "].specName[" + i + "]\" value='" + specName[i] + "'></td>");
                                td.appendTo(tr);
                            });
                            var td_input = $("<td><input name=\"specs[" + index + "].price\" class=\"l-text\" type=\"number\" maxlength='10' value=\"0\"></td>" +
                                "<td><input name=\"specs[" + index + "].credits\" class=\"l-text\" type=\"number\" maxlength='10' value=\"0\"></td>" +
                                "<td><input name=\"specs[" + index + "].stock\" class=\"l-text\" type=\"number\" maxlength='10' value=\"1\"></td>" +
                                "<td><input name=\"specs[" + index + "].stockWarn\" class=\"l-text\" type=\"number\" maxlength='10' value=\"1\"></td>" +
                                "<td><input name=\"specs[" + index + "].artNumber\" class=\"l-number\" type=\"text\" maxlength='20' value=''></td>");
                            td_input.appendTo(tr);

                        });
                        //输入框数字验证
                        $('.l-text').bind('input', function() {
                            var $val = $(this).val();
                            if($val.length > 10){
                                $(this).val($val.slice(0,10));
                            }
                        }).on("keydown", function (event) {
                            var event = event.which ? event.which : window.event.keyCode;
                            if (event == 8 || event == 9 || event == 109 || event == 110 || (event >= 48 && event <= 57) || (event >= 96 && event <= 105)) {
                                return true;
                            } else {
                                return false;
                            }
                        });
                        $('.l-number').on("keydown", function (event) {
                            var event = event.which ? event.which : window.event.keyCode;
                            if (event == 8 || event == 9 || event == 109 || event == 110 || (event >= 48 && event <= 57) || (event >= 96 && event <= 105)) {
                                return true;
                            } else {
                                return false;
                            }
                        });
                        //sku货号
                        $(".l-number").each(function(){
                            $(this).blur(function(){
                                var i = $(this).parent().parent().index();
                                if($.trim($(this).val()).length < 10){
                                    $(this).val('10' + (new Date()).valueOf() + i)
                                }
                            });

                        });

                        //颜色input添加上传图片框
                        //var lastUl = $("#spec ul:last");
                        var itemEdit = $(".pro-type-edit");
                        itemEdit.html("");
                        //var mlen = $("li input:checked",lastUl).length;
                        var mlen = 1;
                        //1.颜色数组不是最后一个元素 -- 最后一个元素的选中数的倍数递增 0.2.4
                        //计算最后一个规格外所有选中的规格数量
                        var checkLen = $("#spec ul:last").find("li input:checked").length;
                        if(checkLen > 0){
                            mlen *= checkLen;
                        }
                        //2.颜色数组是最后一个元素 -- 0.1.2
                        var totalIndex = $("#spec ul").length;
                        var thisIndex = 1;
                        $(".Father_Title li").each(function(){
                            if(/色/.test($(this).html()) == true){
                                thisIndex = $(this).parent().index();
                                if(thisIndex == (totalIndex - 2)){
                                    mlen = 1
                                }
                                console.log(mlen)
                                var $item = $(this).parent().next("ul");
                                var $itemInput = $("li",$item).find("label").children("input");
                                var y = 0;
                                $itemInput.each(function(){
                                    var j = $(this).parent().parent().index();
                                    if($(this).is(":checked")){
                                        var aval = $(this).val();
                                        $(".pro-type-edit").append("<div class=edit-con data-name="+ j +">"
                                            + "颜色：<b>"+ aval +"</b>排序：<input class='l-text' type='text' name='specs["+ y*mlen +"].sort' value='"+j+"' maxlength='10'>"
                                            + "<input class='obj-input' type='hidden' name='specs["+ y*mlen  +"].path' value='' />"
                                            + "<img class='obj-img' src='' style='display: none' />"
                                            + "<span><input type='file' data-image='specs["+ y*mlen +"].path' data-action='goods' id='upload-"+y*mlen+"'></span></div>");
                                        y++;
                                    }
                                    else{
                                        $(".pro-type-edit div[data-name='"+j+"']").remove();
                                    }
                                })

                                //遍历
                                if(!$itemInput.is(":checked")){
                                    itemEdit.hide();
                                }
                                else{
                                    itemEdit.show();
                                }
                            }
                        })
                    }
                    //结束创建Table表
                    arrayColumn.pop();//删除数组中最后一项
                    //合并单元格
                    $(table).mergeCell({
                        // 目前只有cols这么一个配置项, 用数组表示列的索引,从0开始
                        cols: arrayColumn
                    });


                } else {
                    //未全选中,清除表格
                    document.getElementById('createTable').innerHTML = "";
                }
            },//合并行
            hebingFunction: function () {
                $.fn.mergeCell = function (options) {
                    return this.each(function () {
                        var cols = options.cols;
                        for (var i = cols.length - 1; cols[i] != undefined; i--) {
                            // fixbug console调试
                            // console.debug(cols[i]);
                            mergeCell($(this), cols[i]);
                        }
                        dispose($(this));
                    });
                };
                function mergeCell($table, colIndex) {
                    $table.data('col-content', ''); // 存放单元格内容
                    $table.data('col-rowspan', 1); // 存放计算的rowspan值 默认为1
                    $table.data('col-td', $()); // 存放发现的第一个与前一行比较结果不同td(jQuery封装过的), 默认一个"空"的jquery对象
                    $table.data('trNum', $('tbody tr', $table).length); // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用
                    // 进行"扫面"处理 关键是定位col-td, 和其对应的rowspan
                    $('tbody tr', $table).each(function (index) {
                        //console.log($table.data('col-content'));
                        // td:eq中的colIndex即列索引
                        var $td = $('td:eq(' + colIndex + ')', this);
                        // 取出单元格的当前内容
                        //var currentContent = $td.html();
                        var currentContent = $td.find("b").html();
                        // 第一次时走此分支
                        if ($table.data('col-content') == '') {
                            $table.data('col-content', currentContent);
                            $table.data('col-td', $td);
                        } else {
                            // 上一行与当前行内容相同
                            if ($table.data('col-content') == currentContent) {
                                // 上一行与当前行内容相同则col-rowspan累加, 保存新值
                                var rowspan = $table.data('col-rowspan') + 1;
                                $table.data('col-rowspan', rowspan);
                                // 值得注意的是 如果用了$td.remove()就会对其他列的处理造成影响
                                $td.hide();
                                // 最后一行的情况比较特殊一点
                                // 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan
                                if (++index == $table.data('trNum'))
                                    $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
                            } else { // 上一行与当前行内容不同
                                // col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理
                                if ($table.data('col-rowspan') != 1) {
                                    $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
                                }
                                // 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan
                                $table.data('col-td', $td);
                                $table.data('col-content', $td.find("b").html());
                                $table.data('col-rowspan', 1);
                            }
                        }
                    });
                }

                // 同样是个private函数 清理内存之用
                function dispose($table) {
                    $table.removeData();
                }
            },
            //组合数组
            doExchange: function (doubleArrays) {
                var len = doubleArrays.length;
                if (len >= 2) {
                    var arr1 = doubleArrays[0];
                    var arr2 = doubleArrays[1];
                    var len1 = doubleArrays[0].length;
                    var len2 = doubleArrays[1].length;
                    var newlen = len1 * len2;
                    var temp = new Array(newlen);
                    var index = 0;
                    for (var i = 0; i < len1; i++) {
                        for (var j = 0; j < len2; j++) {
                            temp[index] = arr1[i] + "," + arr2[j];
                            index++;
                        }
                    }
                    var newArray = new Array(len - 1);
                    newArray[0] = temp;
                    if (len > 2) {
                        var _count = 1;
                        for (var i = 2; i < len; i++) {
                            newArray[_count] = doubleArrays[i];
                            _count++;
                        }
                    }
                    //console.log(newArray);
                    return step.doExchange(newArray);
                }
                else {
                    return doubleArrays[0];
                }
            }
        }
        return step;
    };
    return{
        Good_sku: Good_sku
    };

});
